/**
 * @Project : algorithm-learning
 * @Author : Ruoyu Wang
 * @User : Momenta
 * @DateTime : 2024/4/16 18:59
 */

//小红有一个长度为n的数组a，记子区间[l,r]的权值为al|al-1|...|ar即区间内所有数的按位或运算的结果。
//一共有n*(n+1)/2个子区间，小红想知道对应的n*(n+1)/2个权值中，有多少个不同的取值。
//
//输入描述
//  第一行一个整数n，表示数组长度
//  第二行n个整数a1,a2,...,an，表示数组a的元素
//  1≤n≤10^5
//  1≤ai≤10^9
//输出描述
//  输出一个整数，表示不同的取值个数
//
//示例1
//输入
//3
//1 2 4
//输出
//6
//说明
//[1,1]的权值为1
//[1,2]的权值为3
//[1,3]的权值为7
//[2,2]的权值为2
//[2,3]的权值为6
//[3,3]的权值为4
//权值两两不同，共有6种取值

#include <cstdio>
#include <iostream>
#include <unordered_set>

using namespace std;

int main() {
    int n;
    scanf("%d", &n);
    unordered_set<int> set;
    int a[n];
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }
    int res = 0;
    for (int i = 0; i < n; i++) {
        int tmp = 0;
        for (int j = i; j < n; j++) {
            tmp |= a[j];
            if (set.count(tmp) == 0) {
                res++;
                set.insert(tmp);
            }
        }
    }
    printf("%d", res);
}